00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef DESCENE_HPP
00033 #define DESCENE_HPP
00034
00035
00036 #pragma warning (disable : 4250)
00037
00038 #include "deGlobalTypes.hpp"
00039 #include "deMath.hpp"
00040 #include "deWorld.hpp"
00041 #include "deRenderStates.hpp"
00042
00043 #if defined(DESCENE_DLL_EXPORTS) || defined(DESTINY3D_EXPORT_ALL)
00044 # define DESCENE_API extern "C" DEDLL_EXPORT
00045 #elif defined(DESTINY3D_STATIC_LINK)
00046 # define DESCENE_API extern "C"
00047 #else
00048 # define DESCENE_API extern "C" DEDLL_IMPORT
00049 #endif
00050
00051 #ifdef USING_DESTINY3D
00052 #ifdef _DEBUG
00053 # ifdef DESTINY3D_STATIC_LINK
00054 # pragma comment(lib, "deScene_sd")
00055 # else
00056 # pragma comment(lib, "deScened")
00057 # endif //DESTINY3D_STATIC_LINK
00058 #else
00059 # ifdef DESTINY3D_STATIC_LINK
00060 # pragma comment(lib, "deScene_s")
00061 # else
00062 # pragma comment(lib, "deScene")
00063 # endif //DESTINY3D_STATIC_LINK
00064 #endif //_DEBUG
00065 #endif //USING_DESTINY3D
00066
00067
00068 class IdeActor;
00069 class IdeAnimatedMesh;
00070 class IdeBitmapProxy;
00071 class IdeBoundingVolume;
00072 class IdeCamera;
00073 class IdeDriver;
00074 class IdeLineBrush;
00075 class IdeMesh;
00076 class IdePlaneFrustum;
00077 class IdePortal;
00078 class IdeRender;
00079 class IdeRenderLight;
00080 class IdeRenderMaterial;
00081 class IdeRenderTexture;
00082 class IdeSurface;
00083 class IdeVertexBuffer;
00084 class IdeWorld;
00085
00086
00087 class IdeSceneGraph;
00088 class IdeCollision;
00089 class IdeSceneRoom;
00090 class IdeSceneObject;
00091 class IdeSceneABT;
00092 class IdeSceneActor;
00093 class IdeSceneSky;
00094 class IdeSceneStaticMesh;
00095 class IdeSceneTerrain;
00096 class IdeSceneLight;
00097
00098
00099 class IdeSceneAnimatedMesh;
00100
00101
00102 DESCENE_API deBoolean IdeScene_Initialize();
00103 DESCENE_API void IdeScene_ShutDown();
00104
00105 DESCENE_API IdeSceneGraph* IdeSceneGraph_GetSceneGraphPtr();
00106
00107 DESCENE_API IdeCollision* IdeCollision_CreateCollision();
00108
00109 DESCENE_API long IdeSceneRoom_GetWOInterfaceID();
00110
00111 DESCENE_API long IdeSceneObject_GetWOInterfaceID();
00112
00113
00114
00115 DESCENE_API IdeSceneABT * IdeSceneObject_CreateSceneABT();
00116
00117 DESCENE_API IdeSceneActor* IdeSceneObject_CreateSceneActor();
00118 DESCENE_API IdeSceneAnimatedMesh* IdeSceneObject_CreateSceneAnimatedMesh();
00119
00120 DESCENE_API IdeSceneRoom* IdeSceneRoom_CreateRoom();
00121
00122 DESCENE_API IdeSceneSky * IdeSceneObject_CreateSceneSky();
00123
00124 DESCENE_API IdeSceneStaticMesh* IdeSceneObject_CreateSceneStaticMesh();
00125
00126 DESCENE_API IdeSceneTerrain* IdeSceneObject_CreateSceneTerrain();
00127
00128 DESCENE_API IdeSceneLight* IdeSceneObject_CreateSceneLight();
00129
00130
00131 DESCENE_API deBoolean IdeScene_TestABT();
00132
00133
00134
00135
00136
00137 //class IdeCollision
00138 DE3D_INTERFACE_(IdeCollision)
00139 {
00140 protected:
00141 virtual ~IdeCollision() {}
00142 public:
00143
00144 virtual long Release() = 0;
00145
00146
00147 enum deCollideDetail
00148 {
00149 deCollidePoint =0x01,
00150 deCollideSphere =0x02,
00151 deCollideAABB =0x04,
00152 deCollideOBB =0x08,
00153 deCollide_32Bit = 0x7fffffff
00154 };
00155
00156 struct deCollideParams
00157 {
00158 deVec3d Start;
00159 deVec3d Delta;
00160 deBoundSphere Sphere;
00161 deAABB AABB;
00162 IdeBoundingVolume* CustomBV;
00163 deCollideDetail ThisDetail;
00164 deCollideDetail WorldDetail;
00165 };
00166
00167 struct deCollideInfo
00168 {
00169 deVec3d Position;
00170 deVec3d Normal;
00171 deDouble Percent;
00172 DWORD Contents;
00173 IdeSurface* Surface;
00174 IdeSceneObject* HitObject;
00175 IdeSceneRoom* HitRoom;
00176 };
00177
00178
00179 virtual void Reset() = 0;
00180
00181
00182 virtual long GetNumCollisions() = 0;
00183
00184 virtual void GetCollision(long ColNum, deCollideInfo & collision) = 0;
00185
00186
00187 virtual deBoolean AddCollision(const deCollideInfo & collision) = 0;
00188 };
00189
00190
00191
00192
00193 //class IdeSceneGraph
00194 DE3D_INTERFACE_(IdeSceneGraph)
00195 {
00196 protected:
00197 virtual ~IdeSceneGraph() {}
00198
00199 public:
00200 struct deSceneTraversal
00201 {
00202
00203 IdeCamera * cam;
00204 IdeRender * render;
00205 long MaxTPortalDepth;
00206
00207 long CurrentPortalDepth;
00208 long CurrentPassNum;
00209 IdeSceneGraph* CurrentSceneGraph;
00210 IdePlaneFrustum* CurrentFrustum;
00211 deTransformInfo CurrentTransform;
00212
00213 deDouble FarthestDistanceFound;
00214 };
00215
00216
00217 virtual long Traverse(deSceneTraversal* Params) = 0;
00218
00219
00220 virtual deBoolean SetCullFlags(long CullFlags) = 0;
00221
00222 virtual long GetCullFlags() = 0;
00223
00224
00225 virtual deBoolean SetDebugFlags(long DebugFlags) = 0;
00226
00227 virtual long GetDebugFlags() = 0;
00228
00229 virtual IdeSceneRoom * FindRoomWithID(deWorldID WorldID, deObjectID ObjectID) = 0;
00230
00231
00232 virtual deBoolean AddRoom(IdeSceneRoom * Room) = 0;
00233
00234 virtual deBoolean RemoveRoom(IdeSceneRoom* Room) = 0;
00235
00236 virtual deBoolean AddSceneObject(IdeSceneObject* Object) = 0;
00237 virtual void RemoveSceneObject(IdeSceneObject* Object) = 0;
00238 virtual void RepositionSceneObject(IdeSceneObject* Object) = 0;
00239
00240
00241 virtual deBoolean PortalOccluded(IdePortal * portal) = 0;
00242
00243 virtual DWORD TestIntersection(const deVec3d &Position, const deVec3d *Mins, const deVec3d *Maxs) = 0;
00244
00245 virtual deBoolean TestCollision(const IdeCollision::deCollideParams & Params, IdeCollision * Collision) = 0;
00246
00247 virtual void ObjectExtents(IdeBoundingVolume* volume, IdeCollision * Results) = 0;
00248 virtual long LightExtents(const deVec3d& pos, const deAABB& bbox, IdeSceneLight** outBuffer, long bufferSize) = 0;
00249
00250
00251 enum deCullModes
00252 {
00253
00254 deCullFrustum =(0x0001),
00255 deCullDetail =(0x0002),
00256 deCullOccludeSphere =(0x0004),
00257 deCullOccludeConvHull =(0x0008),
00258 deCullOccludeRaster =(0x0010),
00259 deCullFarPlaneOptimize =(0x0020),
00260 deCull_Max,
00261 deCull_32bit=(0x7fffffff)
00262 };
00263
00264
00265 enum deDebugFlags
00266 {
00267 deDrawAABB =(0x0001),
00268 deDrawOBB =(0x0002),
00269 deDrawSphere =(0x0004),
00270 deDrawSpatialPartition =(0x0008),
00271 deDebugFlag_Max,
00272 deDebugFlag_32bit=(0x7fffffff)
00273 };
00274
00275
00276 enum deContents
00277 {
00278 deContentsNone =(0x00000000),
00279 deContentsClear =(0x00000001),
00280 deContentsOpaque =(0x00000002),
00281 deContentsSolid =(0x00000004),
00282 deContentsUser10 =(0x00100000),
00283 deContentsUser09 =(0x00200000),
00284 deContentsUser08 =(0x00400000),
00285 deContentsUser07 =(0x00800000),
00286 deContentsUser06 =(0x01000000),
00287 deContentsUser05 =(0x02000000),
00288 deContentsUser04 =(0x04000000),
00289 deContentsUser03 =(0x08000000),
00290 deContentsUser02 =(0x10000000),
00291 deContentsUser01 =(0x20000000),
00292 deContents_Max,
00293 deContents_32bit=(0x7fffffff)
00294 };
00295 };
00296
00297
00298
00299
00300 //class IdeSceneRoom : virtual public IdeWorldObject
00301 DE3D_INTERFACE(IdeSceneRoom, IdeWorldObject)
00302 {
00303 protected:
00304 virtual ~IdeSceneRoom() {}
00305 public:
00306
00307
00308 virtual void SetRoomListPtr(void * ptr) = 0;
00309 virtual void*GetRoomListPtr() = 0;
00310
00311
00312 virtual long Traverse(IdeSceneGraph::deSceneTraversal* Params) = 0;
00313 virtual deBoolean TestCollision(const IdeCollision::deCollideParams & Params, IdeCollision * Collision) = 0;
00314 virtual long GetPassNum() = 0;
00315 virtual void GetAABB(deVec3d &Min, deVec3d &Max) = 0;
00316
00317 virtual void SetContents(DWORD contents) = 0;
00318 virtual DWORD GetContents() = 0;
00319
00320
00321 virtual deBoolean AddSceneObject(IdeSceneObject * obj) = 0;
00322
00323 virtual deBoolean RemoveSceneObject(IdeSceneObject * obj) = 0;
00324
00325 virtual deBoolean AddPortal(IdePortal * portal) = 0;
00326 };
00327
00328
00329
00330
00331
00332 //class IdeSceneObject : virtual public IdeWorldObject
00333 DE3D_INTERFACE(IdeSceneObject, IdeWorldObject)
00334 {
00335 protected:
00336 virtual ~IdeSceneObject() {}
00337 public:
00338
00339 enum activate_t
00340 {
00341 activate_visible = 0,
00342 activate_collide = 1,
00343 activate_count,
00344 activate_32bit =0x7fffffff
00345 };
00346
00347
00348 enum interface_t
00349 {
00350 iface_IdeSceneObject=0,
00351 iface_IdeSceneStaticMesh=1,
00352 iface_IdeSceneSky=2,
00353 iface_IdeSceneTerrain=3,
00354 iface_IdeSceneABT=4,
00355 iface_IdeSceneAnimatedMesh=5,
00356 iface_IdeSceneActor=6,
00357 iface_IdeSceneLight=7,
00358
00359 iface_32Bit=0x7fffffff
00360 };
00361 virtual IdeSceneObject::interface_t GetSOIType() = 0;
00362 virtual void* GetSOInterface(IdeSceneObject::interface_t i) = 0;
00363
00364 virtual void PreCache(IdeDriver* pDriver) = 0;
00365
00366
00367 virtual long Traverse(IdeSceneGraph::deSceneTraversal* Params) = 0;
00368
00369
00370 virtual void SetActivation(activate_t a_type, deBoolean Active) = 0;
00371
00372 virtual deBoolean GetActivation(activate_t a_type) const = 0;
00373
00374
00375
00376 virtual void GetWorldTransform(deTransformInfo & mat) = 0;
00377
00378 virtual void SetWorldTransform(const deTransformInfo & mat) = 0;
00379
00380
00381 virtual void GetLocalAABB(deAABB &bbox) = 0;
00382
00383 virtual void GetWorldOBB(deOBB &bbox) = 0;
00384
00385
00386 virtual void GetWorldAABB(deAABB &bbox) = 0;
00387
00388 virtual deVec3d GetBoundCenter() = 0;
00389 virtual deVec3d GetOccludeCenter() = 0;
00390 virtual void GetWorldPos(deVec3d & PosVector) = 0;
00391
00392 virtual deVec3d GetWorldBoundCenter() = 0;
00393 virtual deVec3d GetWorldOccludeCenter() = 0;
00394 virtual deDouble GetBoundRadius() = 0;
00395 virtual deDouble GetOccludeRadius() = 0;
00396
00397 virtual deBoolean IsTransparent() = 0;
00398
00399 virtual deBoolean OccludesObject(deVec3d &position, IdeSceneObject *so, deVec3d &NormalizedDisplacement) = 0;
00400
00401
00402 virtual long GetCurrentPassNum() const = 0;
00403 virtual deBoolean AddRoomReference(IdeSceneRoom * ref, void * ptr) = 0;
00404 virtual void* GetRoomReference(IdeSceneRoom * ref) = 0;
00405 virtual deBoolean RemoveRoomReference(IdeSceneRoom * ref) = 0;
00406 };
00407
00408
00409
00410
00411 //class IdeSceneABT : virtual public IdeSceneObject
00412 DE3D_INTERFACE(IdeSceneABT, IdeSceneObject)
00413 {
00414 protected:
00415 virtual ~IdeSceneABT() {}
00416 public:
00417 virtual deBoolean AddGeometry(IdeMesh* pMesh, const deTransformInfo & worldpos) = 0;
00418 };
00419
00420
00421
00422
00423 //class IdeSceneTerrain : virtual public IdeSceneObject
00424 DE3D_INTERFACE(IdeSceneTerrain, IdeSceneObject)
00425 {
00426 protected:
00427 virtual ~IdeSceneTerrain() {}
00428 public:
00429 virtual deBoolean SetTerrainHeightMap(IdeBitmapProxy * bmp) = 0;
00430 virtual deBoolean SetTerrainColorMap(IdeBitmapProxy * bmp) = 0;
00431 virtual deBoolean SetTerrainDetailMap(IdeBitmapProxy * bmp) = 0;
00432
00433 virtual deVec3d GetTerrainScale() = 0;
00434 virtual void SetTerrainScale(deVec3d vScale) = 0;
00435 virtual void SetTerrainScale(deFloat x, deFloat y, deFloat z) = 0;
00436
00437 virtual deTexCoord GetDetailRepeat() = 0;
00438 virtual void SetDetailRepeat(deTexCoord Repeat) = 0;
00439 virtual void SetDetailRepeat(deFloat u, deFloat v) = 0;
00440
00441 virtual void SetHeightAt(unsigned char ucHeight, long x, long y) = 0;
00442 virtual unsigned char GetTrueHeightAt(long x, long y) = 0;
00443 virtual deFloat GetScaledHeightAt(long x, long y) = 0;
00444
00445 virtual deDouble GetLODBias() = 0;
00446 virtual void SetLODBias(deDouble Bias) = 0;
00447
00448 virtual long GetGMMChunkSize() = 0;
00449 virtual void SetGMMChunkSize(long ChunkSize) = 0;
00450
00451 virtual deBoolean BuildRenderable() = 0;
00452 virtual deBoolean BuildGeoMipMap(IdeDriver* pDriver) = 0;
00453 };
00454
00455
00456
00457
00458 //class IdeSceneSky : virtual public IdeSceneObject
00459 DE3D_INTERFACE(IdeSceneSky, IdeSceneObject)
00460 {
00461 protected:
00462 virtual ~IdeSceneSky() {}
00463 public:
00464
00465 enum SkyType
00466 {
00467 SKY_NONE = 0,
00468 SKY_BOX,
00469 SKY_DOME,
00470 SKY_SECTOR,
00471 SKY_FORCE_32BIT = 0x7fffffff
00472 };
00473
00474 struct SkyInfo
00475 {
00476 union Box_t
00477 {
00478 struct FaceNames_t
00479 {
00480 IdeBitmapProxy * NegX;
00481 IdeBitmapProxy * NegY;
00482 IdeBitmapProxy * NegZ;
00483 IdeBitmapProxy * PosX;
00484 IdeBitmapProxy * PosY;
00485 IdeBitmapProxy * PosZ;
00486 } FaceNames;
00487 IdeBitmapProxy* Faces[6];
00488 };
00489
00490 struct Dome_t
00491 {
00492
00493 };
00494
00495 struct Sector_t
00496 {
00497
00498 };
00499
00500 SkyType type;
00501 union
00502 {
00503 Box_t Box;
00504 Dome_t Dome;
00505 Sector_t Sector;
00506 };
00507 };
00508
00509 virtual deBoolean IsLockedToCam() const = 0;
00510 virtual void LockToCam(deBoolean Lock) = 0;
00511
00512 virtual deBoolean GetInfo(SkyInfo * info) const = 0;
00513 virtual deBoolean SetInfo(const SkyInfo * info) = 0;
00514 };
00515
00516
00517
00518
00519
00520 DE3D_INTERFACE(IdeSceneAnimatedMesh, IdeSceneObject)
00521 {
00522 protected:
00523 virtual ~IdeSceneAnimatedMesh() {}
00524 public:
00525 virtual void SetMesh(IdeAnimatedMesh * mesh) = 0;
00526 };
00527
00528
00529
00530
00531 //class IdeSceneStaticMesh : virtual public IdeSceneObject
00532 DE3D_INTERFACE(IdeSceneStaticMesh, IdeSceneObject)
00533 {
00534 protected:
00535 virtual ~IdeSceneStaticMesh() {}
00536 public:
00537 virtual void SetMesh(IdeMesh* mesh) = 0;
00538 virtual void SetTransparent(deBoolean Trans) = 0;
00539 };
00540
00541
00542
00543
00544 //class IdeSceneActor : virtual public IdeSceneObject
00545 DE3D_INTERFACE(IdeSceneActor, IdeSceneObject)
00546 {
00547 protected:
00548 virtual ~IdeSceneActor() {}
00549 public:
00550 virtual void SetActor(IdeActor* actor) = 0;
00551 };
00552
00553
00554
00555
00556 //class IdeSceneLight : virtual public IdeSceneObject
00557 DE3D_INTERFACE(IdeSceneLight, IdeSceneObject)
00558 {
00559 protected:
00560 virtual ~IdeSceneLight() {}
00561 public:
00562 virtual void SetLightData(const IdeRenderLight::LightData& lightdata) = 0;
00563 virtual const IdeRenderLight::LightData* GetLightData() = 0;
00564 virtual const IdeRenderLight* GetRenderLight() = 0;
00565 };
00566
00567 #endif
00568
00569
00570
00571
00572
00573
00574
00575
00576
00577
00578
00579
00580
00581
00582
00583
00584
00585
00586
00587
00588
00589